package org.springblade.modules.admin.service;

import org.springblade.core.mp.base.BaseService;
import org.springblade.modules.admin.dto.UserTrajectoryDTO;
import org.springblade.modules.admin.dto.UserTrajectorySearchDTO;
import org.springblade.modules.admin.entity.UserTrajectory;
import org.springblade.modules.admin.vo.UserTrajectoryCountVO;
import org.springblade.modules.admin.vo.UserTrajectoryQueryVO;
import org.springblade.modules.admin.vo.UserTrajectoryVO;

import java.util.Date;
import java.util.List;

/**
 * @author: Sharry
 * @createTime: 2023/4/26 15:41
 * @version: Version-1.0
 */
public interface IUserTrajectoryService extends BaseService<UserTrajectory> {

  /**
   * 获取 组-人列表
   *
   * @param tenantId 租户 id
   * @return 用户列表
   */
  List<UserTrajectoryQueryVO> getUserList(String tenantId);

  /**
   * 获取 人员轨迹统计列表
   *
   * @param userTrajectoryVOList    统计列表
   * @param userTrajectorySearchDTO 查询依据
   * @param current                 当前页
   * @param size                    每页大小
   * @return 分页列表
   */
  UserTrajectoryCountVO getUserTrajectoryCount(UserTrajectorySearchDTO userTrajectorySearchDTO,
      List<UserTrajectoryVO> userTrajectoryVOList, Integer current, Integer size);

  /**
   * 获取人员轨迹列表
   *
   * @param userTrajectorySearchDTO 查询条件DTO
   * @return 轨迹列表
   */
  List<UserTrajectoryVO> getUserTrajectoryVOList(UserTrajectorySearchDTO userTrajectorySearchDTO);

  /**
   * 获取最新人员路径
   *
   * @return
   */
  List<UserTrajectory> getUserNewTrajectoryList();

  /**
   * 记录人员轨迹
   *
   * @param userTrajectoryDTO 人员轨迹DTO
   * @return 是否成功记录
   */
  Boolean record(UserTrajectoryDTO userTrajectoryDTO);

  /**
   * 计算用户每日在线和离线时长
   *
   * @param beginTime 开始时间
   * @param endTime   结束时间
   * @return 用户轨迹列表，包含每日平均在线和离线时长
   */
  List<UserTrajectoryVO> calculateUserDailyWorkTime(Date beginTime, Date endTime);

	List<UserTrajectoryVO> calculateUserDayCount(Date beginTime, Date endTime);

	void downExcelDetail(Date beginTime, Date endTime, List<List<String>> rows);
}
